/*
 * @lc app=leetcode.cn id=189 lang=java
 *
 * [189] 轮转数组
 */

// @lc code=start
class Solution {
    public void rotate(int[] nums, int k) {
        // 方法一：暴力法
        // if(nums.length == 0 || k == 0) return;
        // if(k > nums.length) k = k % nums.length;
        // int[] result = new int[k];
        // for(int i = 0; i < k; i++){
        //     result[i] = nums[nums.length - k + i];
        // }
        // for(int i = 0; i< nums.length - k; i++){
        //     nums[nums.length - 1 - i] = nums[nums.length - k - 1 - i];
        // }
        // for(int i = 0; i < k; i++){
        //     nums[i] = result[i];
        // }


        // 逐个置换
        // if(k > nums.length) k = k % nums.length;
        // int temp = 0;
        // for(int i = 0; i < k; i++) {
        //     temp = nums[nums.length - 1];
        //     for(int j = nums.length - 1; j > 0; j--){
        //         nums[j] = nums[j - 1];
        //     }
        //     nums[0] = temp;
        // }

        // 三段逆置
        if(k > nums.length) k = k % nums.length;
        reverse(nums, nums.length - k, nums.length - 1);
        reverse(nums, 0, nums.length - k - 1);
        reverse(nums, 0, nums.length - 1);
        
    }

    public void reverse(int[] nums, int start, int end){
        while(start < end){
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }
}
// @lc code=end

